#include<iostream>
using namespace std;

//class Solution {
//public:
//    string addStrings(string num1, string num2) {
//        string str;
//        str.reserve(max(num1.size(), num2.size()) + 1);
//        int end1 = num1.size() - 1;
//        int end2 = num2.size() - 1;
//        int next = 0;
//        while (end1 >= 0 || end2 >= 0)
//        {
//            int x1 = end1 >= 0 ? num1[end1--] - '0' : 0;
//            int x2 = end2 >= 0 ? num2[end2--] - '0' : 0;
//
//            int x = x1 + x2 + next;
//
//            next = x / 10;
//            x = x % 10;
//
//            str.insert(str.begin(), x + '0');
//        }
//
//        if (next == 1)
//        {
//            str.insert(str.begin(), '1');
//        }
//        return str;
//    }
//};
//
//int main()
//{
//    Solution s1;
//    cout << s1.addStrings("123", "123");
//    return 0;
//}

class Solution {
public:
    bool isdigital(char c)
    {
        if (c >= '0' && c <= '9')
            return true;
        return false;
    }
    int myAtoi(string s) {
        int i = 0;
        int flag = 1;
        int res = 0;
        while (s[i] == ' ')
        {
            ++i;
        }
        if (s[i] == '-')
            flag = -1;
        if (s[i] == '-' || s[i] == '+')
            i++;
        int j = i;
        while (isdigital(s[j]) && j < s.size())
        {
            char c = s[j];
            if (res > INT_MAX / 10 || (res == INT_MAX / 10 && (c - '0') > INT_MAX % 10))
                return INT_MAX;
            if (res < INT_MIN / 10 || (res == INT_MIN / 10 && (c - '0') > -(INT_MIN % 10)))
                return INT_MIN;
            res = res * 10 + flag * (c - '0');
            j++;
        }
        return res;

    }
};